package main

import (
	"fmt"
	"time"
)

func main() {
	//定义只写信道类型 注意箭头位置，注意这里是在定义数据类型
	type Sender = chan<- int

	//定义只读信道类型 注意箭头位置，注意这里是在定义数据类型
	type Receiver = <-chan int

	//定义双向信道
	var pipline = make(chan int)

	//个人理解：在本例中一共有三个信道。 pipline s r ，数据的传输，其实是只发生在pipline这一个信道上。
	//s 或 r，只是对pipline这个双向信道的部份授权。一个有只写权限，一个有只读权限。

	go func() {
		var s Sender = pipline //s 只对 pipline信道有写权限
		fmt.Println("准备发送数据：100")
		s <- 100

	}()

	go func() {
		var r Receiver = pipline //r 只对 pipline信道有读权限
		num := <-r
		fmt.Printf("接收到的数据是: %d", num)
	}()

	// 主函数sleep，使得上面两个goroutine有机会执行
	time.Sleep(time.Second)
}
